// var jweixin = require('jweixin-module');
import {
	config
} from "../config.js";
import jweixin from 'weixin-js-sdk'

import {
	WxJsSdkConfig,
	wxLogin,
	loginMemberById,
	wxOpenidLogin,
	queryPayStatus
} from "../utils/api/user.js"
import store from '../store/index.js'
let pre_url = process.env.NODE_ENV === 'development' ? config.dev_url : config.base_url;
export default {
	//判断是否在微信中
	isWechat: function() {
		var ua = window.navigator.userAgent.toLowerCase();
		if (ua.match(/micromessenger/i) == 'micromessenger') {
			//console.log('是微信客户端')
			return true;
		} else {
			//console.log('不是微信客户端')
			return false;
		}
	},
	async initLogin(callback) {
		uni.showLoading({
			title: "加载中",
			mask: true
		});
		let code = this.getUrlCode('code')
		let ruser = this.getUrlCode('ruser')
		if (ruser) {
			store.commit('setRuserValue', ruser)
		}
		if (code) {
			let obj = ''
			//#ifndef H5
			obj = new window.URL(window.location.href);
			//#endif
			//#ifndef H5
			obj = {}
			//#endif
			// obj.searchParams.delete("code")
			// obj.searchParams.delete("state")
			// window.history.replaceState({}, 0, obj.href)
			await wxLogin({
				code: code
			}).then(res => {
				if (res.userId) {
					store.commit('setUserIdValue', res.userId)
				} else {
					uni.removeStorageSync("userId")
					store.commit('setUserIdValue', null)
				}
				if (res.openid) {
					store.commit('setOpenid', res.openid)
					this.openIdLogin(res.openid)
					// this.getWxConfig()
				} else {
					uni.removeStorageSync("openid")
				}
				uni.hideLoading();
			})
		} else {
			uni.hideLoading();
			console.log('重定向授权');
			const appid = config.wx_appid;
			const redirect_uri = location.href;
			const redirect_url = encodeURIComponent(redirect_uri);
			const scope = "snsapi_userinfo"; // snsapi_userinfo || snsapi_base
			let state = ''
			state = encodeURIComponent(state);
			var url =
				`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_url}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`
			document.location.replace(url)
		}
	},
	// openid实现自动登录
	async openIdLogin(openId) {
		uni.hideLoading();
		await wxOpenidLogin({
			openId
		}).then(res => {
			// 这里我自动登录，没有提交openid 我后端是返回的null 这一步不用更改
			if (res.loginUser != null) {
				store.commit('loginStatus', res.loginUser)
				store.commit('setUserIdValue', res.loginUser.id)
			} else {
				store.commit('loginStatus', res.loginUser)
			}
		}).catch(err => {
			console.log(err, 'err');
		})
	},
	getWxConfig() {
		// let obj = new window.URL(window.location.href);
		// obj.searchParams.delete("code")
		// obj.searchParams.delete("state")
		// window.history.replaceState({}, 0, obj.href)
		return
		//暂时不用
		var url = encodeURIComponent(window.location.href.split('#')[0]); //获取当前url然后传递给后台获取授权和签名信息
		WxJsSdkConfig({
			url: url
		}).then(res => {
			//注入config权限配置
			jweixin.config({
				debug: true,
				appId: res.data.signPackage.appId,
				timestamp: res.data.signPackage.timestamp,
				nonceStr: res.data.signPackage.nonceStr,
				signature: res.data.signPackage.signature,
				jsApiList: [ //这里是需要用到的接口名称
					'checkJsApi', //判断当前客户端版本是否支持指定JS接口
					//'onMenuShareAppMessage',//分享接口
					'getLocation', //获取位置
					//'openLocation',//打开位置
					//'scanQRCode',//扫一扫接口
					//'chooseWXPay',//微信支付
					//'chooseImage',//拍照或从手机相册中选图接口
					//'previewImage',//预览图片接口
					//'uploadImage'//上传图片
				]
			});
			if (callback) {
				callback(res.data);
			}
		})
	},
	getUrlCode(name) {
		return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [,
				''
			])[1]
			.replace(/\+/g, '%20')) || null
	},
	//在需要定位页面调用
	getlocation: function(callback) {
		if (!this.isWechat()) {
			//console.log('不是微信客户端')
			return;
		}
		this.initJssdk(function(res) {
			jweixin.ready(function() {
				jweixin.getLocation({
					type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
					success: function(res) {
						// console.log(res);
						callback(res)
					},
					fail: function(res) {
						console.log(res)
					},
					// complete:function(res){
					//     console.log(res)
					// }
				});
			});
		});
	},
	openlocation: function(data, callback) { //打开位置
		if (!this.isWechat()) {
			//console.log('不是微信客户端')
			return;
		}
		this.initJssdk(function(res) {
			jweixin.ready(function() {
				jweixin.openLocation({ //根据传入的坐标打开地图
					latitude: data.latitude,
					longitude: data.longitude
				});
			});
		});
	},
	chooseImage: function(callback) { //选择图片
		if (!this.isWechat()) {
			//console.log('不是微信客户端')
			return;
		}
		//console.log(data);
		this.initJssdk(function(res) {
			jweixin.ready(function() {
				jweixin.chooseImage({
					count: 1,
					sizeType: ['compressed'],
					sourceType: ['album'],
					success: function(rs) {
						callback(rs)
					}
				})
			});
		});
	},
	payQuery(orderSn, userId) {
		uni.showLoading({
			title: '支付查询中'
		});
		// GK1928105173176156160
		queryPayStatus({
			orderSn,
			userId
		}).then(res => {
			uni.hideLoading();
			if (parseInt(res.data.status) === 2) {
				// 支付成功
				uni.showModal({
					title: '支付成功',
					content: '开通会员成功',
					showCancel: false,
					success: function(res) {
						if (res.confirm) {
							return uni.reLaunch({
								url: `/pages/mine/mine`
							})
							console.log('用户点击确定');
						} else if (res.cancel) {
							console.log('用户点击取消');
						}
					}
				});
			} else {
				// 支付失败
				uni.showModal({
					title: '支付失败',
					content: '未查询到支付订单，如已支付，请点击我已支付',
					showCancel: true,
					confirmText: '我已支付',
					success: function(res) {
						if (res.confirm) {
							this.payQuery(orderSn, userId)
							console.log('用户点击确定');
						} else if (res.cancel) {
							console.log('用户点击取消');
						}
					}
				});
			}
		}).catch(err => {
			uni.showModal({
				title: '支付查询失败',
				content: '支付结果获取失败',
				showCancel: false,
			});
			uni.hideLoading();
		})
	},
	//微信支付
	wxpay(data, callback) {
		let that = this;
		// #ifdef MP-WEIXIN 
		// 仅作为示例，非真实参数信息。
		uni.requestPayment({
			...data,
			success: function(res) {
				callback('success', res)
				that.payQuery(data.orderNo, data.userId)
				console.log('success:' + JSON.stringify(res));
			},
			fail: function(err) {
				uni.showToast({
					icon: 'none',
					title: '取消支付'
				})
				console.log('fail:' + JSON.stringify(err));
			}
		});

		// #endif 

		// #ifdef WEB
		if (!this.isWechat()) {
			//console.log('不是微信客户端')
			return;
		}
		jweixin.config({
			appId: data.appId,
			timestamp: data.timeStamp,
			nonceStr: data.nonceStr,
			package: data.package,
			signType: data.signType,
			signature: data.paySign,
			jsApiList: ['chooseWXPay'] // 必填，需要使用的JS接口列表
		})
		jweixin.ready(() => {
			jweixin.chooseWXPay({
				timestamp: data
					.timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
				nonceStr: data.nonceStr, // 支付签名随机串，不长于 32 位
				package: data.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
				signType: "MD5", // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
				paySign: data.paySign, // 支付签名
				success: function(res) {
					// console.log(res);
					callback(res)
				},
				fail: function(res) {
					callback(res)
				},
				// complete:function(res){
				//     console.log(res)
				// }
			});
		});
		// #endif 
	}
}